<?php
// ### AclAssistant : Community

class Action_Community_EditUserProfile extends RL_Handler
{
	public function getWidgetsConfig ()
	{
		//		$community_oid = $this->data['comity_oid'];
		$widgets = array(
			/*
			'0' => array (
				'name' => 'ScriptWidget',
				'params' => array(
					'widget_position' => 'widgets',
					'widget_script' => 'auth_authenticated.php',
					'widget_title' => 'Мои OpenId',
				),
			),
			 */
		);
		return $widgets;
	} // end of function getWidgetsConfig

	public function getUrl ()
	{
		return $this->acl_data['community_url'].'/members/'.$this->acl_data['user_id'].'/edit';
	} // end of function getUrl

	protected function init() {
		// -- old theme HACK : 2008-05-21 : lucky -- {{{
		$community_skin = 'platonica';
		$tpl = $this->ctx->tpl;
		$community_model = $this->ctx->mm->getModel("Community");
		$community_model->setDefaultSkin($community_skin);
		$tpl->setSkin($community_skin);
		$views_php = $tpl->findFile('', 'views', $tpl->_skin, 'php');
		unset ($config);
		include $views_php; // got $config
		$this->ctx->rh->views->setViewConfig($config);
		// -- old theme HACK : 2008-05-21 : lucky -- }}}

		parent::init();


		$this->acl_assistant = $this->module->aa;
		$this->acl_data = $this->acl_assistant->getInfo();
		$this->acl_assistant->getAvailableOperations();

		$this->rh->UseClass("Model_User");
		$this->m_user = new Model_User( $this->rh, $this->acl_assistant);
		$this->rh->UseClass("Model_MailSubscriptions");
		$this->m_subscribe = new Model_MailSubscriptions( $this->rh, $this->acl_assistant);
	}

	public function process ()
	{
		$user_oid = $this->params['user_url'];
		if ($this->acl_data['user']['user_id'] != $user_oid) {
			return; // 404
			echo "За эту ошибка ваша душа была продана дьяволу. Не хотите <a href=\"http://karmacleaner.org\">очистить карму</a>? ;)";
			die();
		}
		
		$user_obj = $this->m_user->getUser( $user_oid );
		$user_data = $user_obj->data;

		$view = $this->rh->views->findByName('edit_profile');

		$rh = $this->rh;
		$rh->UseClass("Form_Form");

		// создаст объекты форм для каждого раздела и положит в массив $this->forms, на входе массив с разделами
		$form = new Form( $this->rh,
	        array(
	            "auto_user_id"  => 0,
				"template_form"	=> "form:Form",
				"template_buttonlist" => "form:Buttons",
				"db_table" => "userinfo", // это id формы
	             ), NULL,
				NULL // дефолтные шаблонные переменные, если таковые есть в шаблонах
				);

		$group1 = $form->AddField( NULL, array(
			"model"       => "group", // все аспекты укладываем в "group"
			"interface"   => "group",
			"validator"   => "group",
			"view"        => "group",

			"group_tpl"   => "group:PlainList", // шаблон для вывода группы

			"wrapper"     => "wrapper_group",
			"wrapper_tpl" => "wrapper:Plain",
		));

		$group1->model->Model_AddField( "fullname", array(
				// параметры бд
				"db_name" => "fullname",
				"db_size" => 100,
				"model_default" => $user_data['fullname'],
				// параметры рендеринга форм
				"wrapper_tpl"      => "wrapper:TextWrapper", // обертка вокруг поля при создании итема
				"interface_tpl"    => "string:Plain", // само поле
				"wrapper_title"    => "Имя",
				"wrapper_desc"     => "Максимум 100 символов",
				'validator'        => 'validator_string',
				"validator_params" => array("not_empty"=>1, 'max' => 100),
			) );

		$group1->model->Model_AddField( "status", array(
			// параметры бд
			"db_name" => "status",
			"db_size" => 40,
			"model_default" => isset($user_data['status'])? $user_data['status'] : '',
			// параметры рендеринга форм
			"wrapper_tpl"      => "wrapper:TextWrapper", // обертка вокруг поля при создании итема
			"interface_tpl"    => "string:Plain", // само поле
			"wrapper_title"    => "Подпись",
			"wrapper_desc"     => "Максимум 40 символов",
			'validator'        => 'validator_string',
			"validator_params" => array("not_empty"=>0, 'max' => 40),
		));

		$group1->model->Model_AddField( "description", array(
			// параметры бд
			"db_name" => "description",
			"model_default" => isset($user_data['description']) ? $user_data['description'] : '',
			// параметры рендеринга форм
			"wrapper_tpl"          => "wrapper:TextAreaWrapper", // обертка вокруг поля при создании итема
			"interface_tpl"        => "string:Tinymce",
			"interface_tpl_params" => array ('tiny_mce_layout' => 'light'),
			"wrapper_title"        => "Пара слов о себе",
			"wrapper_desc"         => "Расскажите другим пользователям о вашей работе, ваших достижениях, ваших интересах",
			"validator_params"     => array("not_empty"=>0, ),
		));

		$group1->model->Model_AddField( "avatar", array(
			"db_name"       => "avatar",
			"model"         => "model_upload",
			"model_default" => isset($user_data['avatar']) ? $user_data['avatar'] : '',
			"wrapper_tpl"   => "wrapper:FileWrapper",
			"interface_tpl" => "upload:UploadImage",
			"wrapper_title" => "Аватар",
			"wrapper_desc"  => "Картинка в формате jpg, gif или png. Рекомендуемый размер 100x100 пикселей",

			"validator" => "validator_upload",
		    "validator_params" => array(
				"maxsize"=>2048*1000,
				"fileext"=>array('gif', 'png', 'jpg', 'jpe', 'jpeg'),
				// HACK : 2007-12-19 : lucky
				// сами масштабируем
				//"fixed_w"=>100,
				//"fixed_h"=>100,
			),
		));

		$group1->model->Model_AddField( "notify_new_items", array(
			"db_name" => "notify_new_items",
			"model_default" => isset($user_data['notify_new_items']) ? $user_data['notify_new_items']: false ,
			"wrapper_tpl"   => "wrapper:CheckboxWrapper",
			"interface_tpl" => "options:Checkbox",
			"wrapper_title" => "Посылать уведомления о новых сообщениях",
		) );

		$group1->model->Model_AddField( "notify_my_items", array(
			"db_name" => "notify_my_items",
			"model_default" => isset($user_data['notify_my_items']) ? $user_data['notify_my_items'] : false,
			"wrapper_tpl"   => "wrapper:CheckboxWrapper",
			"interface_tpl" => "options:Checkbox",
			"wrapper_title" => "Посылать уведомления о дискуссиях, в которых вы участвуете",
		) );

		$group1->model->Model_AddField( "email", array(
			// параметры бд
			"db_name"          => "e-mail",
			"model_default"    => $user_data['email'],
			// параметры рендеринга форм
			"wrapper_tpl"      => "wrapper:TextWrapper", // обертка вокруг поля при создании итема
			"interface_tpl"    => "string:Plain", // само поле
			"wrapper_title"    => "Адрес электронной почты",
			"wrapper_desc"     => "На него будут присылаться уведомления",
			'validator'        => 'validator_string',
			"validator_params" => array("not_empty"=>0, 'max'=>256),
		));

		// у каждой формы две кнопки
		$form->AddButton( array(
			"event" => FORM_EVENT_OK,
			"title" => "Okay",
			"template" => "Submit",
		));

		$form->AddButton( array(
			"event" => FORM_EVENT_CANCEL,
			"title" => "Cancel",
			"template" => "Cancel",
		));

		$result = $form->Handle();

		if ( $result===false ) { // сабмит формы
			foreach ($form->hash as $field_name=>$model) {

				if (get_class($model->model) == "FormComponent_model_upload") {

					if ($this->rh->FILES['_'.$field_name]['tmp_name']) {
						// Тут создается объект ImageStorage, который и сохранит картинку нужным образом
						$this->rh->UseClass('stores_ImageStorage');
						$img_store = new ImageStorage( $this->ctx->store );

						$thumbs = $img_store->thumbs;
						$thumbs[ 'sm1']['filter'] = 'scale';
						$thumbs[ 'sm1'][ 'max_w'] = 48;
						$thumbs[ 'sm1'][ 'max_h'] = 48;
						$thumbs[ 'sm2']['filter'] = 'scale';
						$thumbs[ 'sm2'][ 'max_w'] = 22;
						$thumbs[ 'sm2'][ 'max_h'] = 22;
						$thumbs['orig']['filter'] = 'scale';
						$thumbs['orig'][ 'max_w'] = 100;
						$thumbs['orig'][ 'max_h'] = 100;

						$image_oid = $img_store->Put( $this->rh->FILES['_'.$field_name]['tmp_name'], $thumbs );

						$user_obj->data[ $field_name ] = $image_oid;
					}

				} else {
					$user_obj->data[ $field_name ] = $model->model->model_data;
				}

			}
			
			$delete_image = array();
			foreach ( $_REQUEST as $key=>$val ) {
				if ( preg_match( '/^delete_image(\d+)$/', $key, $matches ) ) {
					$delete_image[] = $matches[1];
				}
			}

			if ( !empty($delete_image) && isset($user_obj->data['avatar']) ) {
				foreach ( $delete_image as $image_oid ) {
					if ( $image_oid == $user_obj->data['avatar'] ) {
						$image_store = new ImageStorage( $this->ctx->store );
						$image_store->Del($image_oid);
						unset($user_obj->data['avatar']);
						break;
					}
				}
			}

			if ($this->m_user->updateUser( $user_obj )) {
				// и прочитать данные о доступе заново
				$this->ctx->principal->Identify();
				$this->acl_data = $this->acl_assistant->getInfo();
				$view->data = $this->acl_assistant->template_data;
				$view->data['userinfo_up'] = 1;

				// --- email notifications --- {{{
				if ($form->hash['notify_new_items']->model->model_data) {
					$this->m_subscribe->subscribe( $user_obj, '1' );
				} else {
					$this->m_subscribe->unsubscribe( $user_obj, '1' );
				}
				if ($form->hash['notify_my_items']->model->model_data) {
					$this->m_subscribe->subscribe( $user_obj, '2' );
				} else {
					$this->m_subscribe->unsubscribe( $user_obj, '2' );
				}
				// --- email notifications --- }}}
			}

		} else {
			$view->data = $this->acl_assistant->template_data;
			$view->data['userinfo_form'] = $result;
		}

		$view->data['__widgets__'] = $this->widgets;
		$view->data['first_time'] = isset($this->rh->GET['first_time']) ? 1: NULL;

		$this->rh->response->setContent( $view );
	} // end of function execute

}
